package org.practice.servlet;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class ImageCreateServlet extends HttpServlet{
	private InputStream input;
	public InputStream getInput() {
		return input;
	}
	public void setInput(InputStream input) {
		this.input = input;
	}
	
	
	public String execute(){
		
//		HttpSession session = request.getSession();
//		// 设置响应类型
//		response.setContentType("image/jpeg");
//		// 图片的内存映像，保存图片二进制信息
		try {
			BufferedImage image = new BufferedImage(60, 20,BufferedImage.TYPE_INT_RGB);
			Random r = new Random();//r.nextInt(255),产生0－255(左包括，右不包括)之间的随机整数
			// 获得画笔对象
			Graphics g = image.getGraphics();
			g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));
			//画一个矩形
			g.fillRect(0, 0, 60, 20);
			g.setColor(new Color(0,0,0));
			String number = String.valueOf(r.nextInt(99999)); 
			//将产生的number缓存到HttpSession对象中，以便服务器验证用户注册所写的验证码
			//session.setAttribute("number", number);
			
			g.drawString(number, 5, 15);
			//获得response对象的字节输出流对象
			ByteArrayOutputStream bos=new ByteArrayOutputStream();
			// 压缩成jpeg编码格式
			JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos);

			// 把BufferedImage对象中的图像信息编码后,按创建该encoder对象时指定的输出流输出
			encoder.encode(image);
			input=new ByteArrayInputStream(bos.toByteArray());
			
		} catch (Exception e) {
			return null;
		}

		return "success";
	}
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		//设置禁止缓存
		response.setHeader("Pragma","No-cache");    
        response.setHeader("Cache-Control","no-cache");    
        response.setDateHeader("Expires", 0);    
		// 设置响应类型
		response.setContentType("image/jpeg");
		// 图片的内存映像，保存图片二进制信息
		BufferedImage image = new BufferedImage(50, 20,BufferedImage.TYPE_INT_RGB);
		Random r = new Random();//r.nextInt(255),产生0－255(左包括，右不包括)之间的随机整数
		// 获得画笔对象
		Graphics g = image.getGraphics();
		g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));
		//画一个矩形
		g.fillRect(0, 0, 50, 20);
		g.setColor(new Color(0,0,0));
		String number = String.valueOf(r.nextInt(99999)); 
		//将产生的number缓存到HttpSession对象中，以便服务器验证用户注册所写的验证码
		HttpSession session = request.getSession(true);
		session.setAttribute("number", number);
		g.drawString(number, 5, 15);
		g.drawString("~~~~~", 5, 15);
		//释放此图形的上下文以及它使用的所有系统资源
		g.dispose();
		
//		//获得response对象的字节输出流对象
//		ByteArrayOutputStream bos=new ByteArrayOutputStream();
//		// 压缩成jpeg编码格式
//		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos);
//
//		// 把BufferedImage对象中的图像信息编码后,按创建该encoder对象时指定的输出流输出
//		encoder.encode(image);
//		input=new ByteArrayInputStream(bos.toByteArray());
		 //向输出流中输出图片    
        //ImageIO.write(image, "JPEG", response.getOutputStream());    

		
		// 把BufferedImage对象中的图像信息编码后,向创建该对象(encoder)时指定的输出流输出
		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response.getOutputStream());
		encoder.encode(image);
	}
}
